// \u4e00-\u9fa5] 中文验证规则
// 在页面或组件中导入
import validate from 'wechat-validate'

Page({
  // 通过 behaviors 注入 validate 方法
  behaviors: [validate],
  data: {
    point: '',
    building: '',
    room: '',
    name: '',
    gender: 0,
    mobile: '',
    idcardFrontUrl: '',
    idcardBackUrl: '',
  },
  // 定义表单数据的验证规则
  rules: {
    name: [
      { required: true, message: '业主名不能为空!' },
      // any-rule 选择 中文姓名
      { pattern: /^(?:[\u4e00-\u9fa5·]{2,16})$/, message: '业主名必须为中文!' },
    ],
    mobile: [
      { required: true, message: '手机号不能为空!' },
      { pattern: /^1[3-9]\d{9}$/, message: '请填写正确手机号!' },
    ],
    // 校验身份证图片不能为空
    idcardFrontUrl: [{ required: true, message: '请上传身份证人像面' }],
    idcardBackUrl: [{ required: true, message: '请上传身份证国徽面' }],
  },
  // 提交表单
  async onSubmit() {
    // 验证码 rules 中定义的全部数据
    const isAllValid = this.validate()
    if (!isAllValid) return

    // 剔除掉冗余数据，__webviewId__ 不需要提交给后端
    delete this.data.__webviewId__
    // status 应该是有管理员修改，而不是用户修改，所以要剔除掉
    delete this.data.status

    // 提交数据给后端 - 添加、编辑房屋都是同一个接口
    await wx.http({
      url: '/room',
      method: 'POST',
      data: this.data,
    })

    // 回退 4 级 - 小程序是多页面应用，销毁不必要的页面
    // 🟢 温馨提示：小程序的页面栈最多保留 10 级页面（官方出于用户体验考虑的限制）
    wx.navigateBack({
      // 如果有 id 表示编辑，编辑只需后退两级
      delta: this.data.id ? 2 : 4,
    })
  },
  removePicture(ev) {
    // 移除图片的类型（身份证正面或反面）
    const type = ev.mark.type
    this.setData({ [type]: '' })
  },
  // 开发调试技巧:  编译模式中添加启动参数  point=吉山公寓&building=1号楼&room=101
  onLoad(query) {
    if (query.id) {
      // 如果有 id 修改房屋信息，动态设置标题，根据房屋 id 获取房屋详情
      wx.setNavigationBarTitle({ title: '编辑房屋信息' })
      this.getDetail(query.id)
    } else {
      // 没有 id 获取页面参数(分步表单传参)
      this.setData(query)
    }
  },
  // 根据 id 获取房屋详情
  async getDetail(id) {
    const res = await wx.http.get(`/room/${id}`)
    // 直接把后端对象更新到 data 中
    this.setData(res.data)
  },
  // 选择图片
  async onChooseImage(e) {
    try {
      const res = await wx.chooseMedia({
        mediaType: ['image'],
        count: 1,
        sizeType: ['compressed'],
      })
      // console.log(res)
      // 用于上传到服务器的
      const tempFilePath = res.tempFiles[0].tempFilePath
      console.log(tempFilePath)

      // 上传图片需调用独立接口 wx.uploadFile
      wx.uploadFile({
        // 需拼接完整路径
        url: wx.http.baseURL + '/upload',
        // 需添加请求头 token
        header: {
          Authorization: `Bearer ${getApp().token}`,
        },
        // 小程序文件的 key
        name: 'file',
        // 小程序文件的 value
        filePath: tempFilePath,
        // 不支持 Promise ，在 success 回调获取结果
        success: (res) => {
          // 需把JSON字符串转对象
          const response = JSON.parse(res.data)
          // 判断业务状态码
          if (response.code !== 10000) return wx.utils.toast('上传失败')
          // 更新页面数据
          this.setData({
            // 对象的 key 通过插值表达式动态设置
            [e.mark.type]: response.data.url,
          })
        },
      })
    } catch (error) {
      //
    }
  },
})
